<?php

namespace Sistema\FrontendBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Pagerfanta\Pagerfanta;
use Pagerfanta\Adapter\DoctrineORMAdapter;
use Pagerfanta\View\TwitterBootstrapView;

use Sistema\AdminBundle\Entity\Torneo;
use Sistema\AdminBundle\Form\TorneoType;
use Sistema\AdminBundle\Form\TorneoFilterType;

use Sistema\FrontendBundle\Form\BuscarEquipoType;

use Sistema\AdminBundle\Entity\Equipo;
use Sistema\FrontendBundle\Form\EquipoType;
use Sistema\FrontendBundle\Form\EquipoFilterType;

use Sistema\AdminBundle\Entity\Fecha;

use Symfony\Component\HttpFoundation\Response;

class ListadoController extends Controller
{
    /**
     * Lists all Torneo entities.
     * 
     * @Route("/listado/torneo", name="listado_torneo")
     * @Template()
     */
    public function indexAction()
    {
        list($filterForm, $queryBuilder) = $this->filter();

        list($entities, $pagerHtml) = $this->paginator($queryBuilder);

    
        return array(
            'entities' => $entities,
            'pagerHtml' => $pagerHtml,
            'filterForm' => $filterForm->createView(),
        );
    }

    /**
    * Create filter form and process filter request.
    *
    */
    protected function filter()
    {
        $request = $this->getRequest();
        $session = $request->getSession();
        $filterForm = $this->createForm(new TorneoFilterType());
        $em = $this->getDoctrine()->getManager();
        $queryBuilder = $em->getRepository('SistemaAdminBundle:Torneo')->createQueryBuilder('e');
    
        // Reset filter
        if ($request->getMethod() == 'POST' && $request->get('filter_action') == 'reset') {
            $session->remove('TorneoControllerFilter');
        }
    
        // Filter action
        if ($request->getMethod() == 'POST' && $request->get('filter_action') == 'filter') {
            // Bind values from the request
            $filterForm->bind($request);

            if ($filterForm->isValid()) {
                // Build the query from the given form object
                $this->get('lexik_form_filter.query_builder_updater')->addFilterConditions($filterForm, $queryBuilder);
                // Save filter to session
                $filterData = $filterForm->getData();
                $session->set('TorneoControllerFilter', $filterData);
            }
        } else {
            // Get filter from session
            if ($session->has('TorneoControllerFilter')) {
                $filterData = $session->get('TorneoControllerFilter');
                $filterForm = $this->createForm(new TorneoFilterType(), $filterData);
                $this->get('lexik_form_filter.query_builder_updater')->addFilterConditions($filterForm, $queryBuilder);
            }
        }
    
        return array($filterForm, $queryBuilder);
    }

    /**
    * Get results from paginator and get paginator view.
    *
    */
    protected function paginator($queryBuilder)
    {
        // Paginator
        $adapter = new DoctrineORMAdapter($queryBuilder);
        $pagerfanta = new Pagerfanta($adapter);
        $currentPage = $this->getRequest()->get('page', 1);
        $pagerfanta->setCurrentPage($currentPage);
        $entities = $pagerfanta->getCurrentPageResults();
    
        // Paginator - route generator
        $me = $this;
        $routeGenerator = function($page) use ($me)
        {
            return $me->generateUrl('torneo', array('page' => $page));
        };
    
        // Paginator - view
        $translator = $this->get('translator');
        $view = new TwitterBootstrapView();
        $pagerHtml = $view->render($pagerfanta, $routeGenerator, array(
            'proximity' => 3,
            'prev_message' => $translator->trans('views.index.pagprev', array(), 'JordiLlonchCrudGeneratorBundle'),
            'next_message' => $translator->trans('views.index.pagnext', array(), 'JordiLlonchCrudGeneratorBundle'),
        ));
    
        return array($entities, $pagerHtml);
    }
    
    /**
     * Lists all Torneo entities.
     * 
     * @Route("/listado/torneo/{id}/grupo", name="listado_torneo_grupo")
     * @Template()
     */
    public function torneoGrupoAction($id)
    {
        $em = $this->getDoctrine()->getManager();

        $torneo = $em->getRepository('SistemaAdminBundle:Torneo')->find($id);
        $grupos = $em->getRepository('SistemaAdminBundle:Grupo')->findBy(array('idTorneo' => $id));
        
        if (!$grupos) {
            //throw $this->createNotFoundException('Unable to find Torneo entity.');
             echo "
                    <head>         
                    <script>                    
                    alert('No se ha definido un Torneo Aun. EL Administrador debe generar un nuevo torneo');                   
                    window.location='../../torneo'; 
                    </script>
                    </head>";
        }

        return array(
            'torneo'    => $torneo,
            'grupos'    => $grupos,
        );
    }
    
    /**
     * Lists all fechas de Torneo entities.
     * 
     * @Route("/listado/torneo/{id}/partido", name="listado_torneo_partido")
     * @Template()
     */
    public function torneoPartidoAction($id)
    {
        $em = $this->getDoctrine()->getManager();

        $torneo = $em->getRepository('SistemaAdminBundle:Torneo')->find($id);
        $fechas = $em->getRepository('SistemaAdminBundle:Fecha')->findFechasByTorneo($id);
        
        if (!$fechas) {
            //throw $this->createNotFoundException('No se han definido Fechas Aun. EL Administrador debe generar las fechas primero');            
              echo "
                    <head>         
                    <script>                    
                    alert('No se han definido Fechas Aun. EL Administrador debe generar las fechas primero');                   
                    window.location='../../torneo'; 
                    </script>
                    </head>";
            
        }

        return array(
            'torneo'    => $torneo,
            'fechas'    => $fechas,
        );
    }
    
    /**
     * Busca partidos de una fecha
     *
     * @Route("/listado/torneo/partidos/{id}/fecha", name="listado_torneo_partidos_fecha")
     * @Template()
     */
    public function partidosFechaAction($id)
    {
        $em = $this->getDoctrine()->getManager();

        $partidos = $em->getRepository('SistemaAdminBundle:Fecha')->findPartidosByFecha($id);

        return array(
            'partidos'    => $partidos
        );
    }
    
    /**
     * Lists all Equipo entities.
     *
     * @Route("/listado/buscar/equipo", name="listado_buscar_equipo")
     * @Template()
     */
    public function buscarEquipoAction()
    {
        $em = $this->getDoctrine()->getManager();
        $request = $this->getRequest();
        $buscar_equipo = $request->get('buscar_equipo');
        if ($buscar_equipo) {
            $queryBuilder = $em->getRepository('SistemaAdminBundle:Equipo')->createQueryBuilder('e')
                    ->innerJoin('e.idClub', 'c')
                    ->where('c.nombre LIKE :nombre')
                    ->setParameter('nombre', '%'.$buscar_equipo['nombre'].'%')
                    ;
        }  else {
            $queryBuilder = $em->getRepository('SistemaAdminBundle:Equipo')->createQueryBuilder('e');
        }

        list($entities, $pagerHtml) = $this->paginator2($queryBuilder);

        $form = $this->createForm(new BuscarEquipoType());
    
        return array(
            'entities' => $entities,
            'pagerHtml' => $pagerHtml,
            'filterForm' => $form->createView()
        );
    }
    
    /**
     * Lists all Jugador entities.
     *
     * @Route("/listado/buscar/jugador", name="listado_buscar_jugador")
     * @Template()
     */
    public function buscarJugadorAction()
    {
        $em = $this->getDoctrine()->getManager();
        $request = $this->getRequest();
        $buscar_jugador = $request->get('buscar_jugador');
        if ($buscar_jugador) {
            $queryBuilder = $em->getRepository('SistemaAdminBundle:Jugador')->createQueryBuilder('e')
                    ->innerJoin('e.idPersona', 'c')
                    ->where('c.nombre LIKE :nombre')
                    ->setParameter('nombre', '%'.$buscar_jugador['nombre'].'%')
                    ;
        }  else {
            $queryBuilder = $em->getRepository('SistemaAdminBundle:Jugador')->createQueryBuilder('e');
        }

        list($entities, $pagerHtml) = $this->paginator2($queryBuilder);

        $form = $this->createForm(new \Sistema\FrontendBundle\Form\BuscarJugadorType());
    
        return array(
            'entities' => $entities,
            'pagerHtml' => $pagerHtml,
            'filterForm' => $form->createView()
        );
    }

    /**
    * Get results from paginator and get paginator view.
    *
    */
    protected function paginator2($queryBuilder)
    {
        // Paginator
        $adapter = new DoctrineORMAdapter($queryBuilder);
        $pagerfanta = new Pagerfanta($adapter);
        $currentPage = $this->getRequest()->get('page', 1);
        $pagerfanta->setCurrentPage($currentPage);
        $entities = $pagerfanta->getCurrentPageResults();
    
        // Paginator - route generator
        $me = $this;
        $routeGenerator = function($page) use ($me)
        {
            return $me->generateUrl('frontend_equipo', array('page' => $page));
        };
    
        // Paginator - view
        $translator = $this->get('translator');
        $view = new TwitterBootstrapView();
        $pagerHtml = $view->render($pagerfanta, $routeGenerator, array(
            'proximity' => 3,
            'prev_message' => $translator->trans('views.index.pagprev', array(), 'JordiLlonchCrudGeneratorBundle'),
            'next_message' => $translator->trans('views.index.pagnext', array(), 'JordiLlonchCrudGeneratorBundle'),
        ));
    
        return array($entities, $pagerHtml);
    }
    
    /**
     * Finds and displays a Equipo entity.
     *
     * @Route("listado/{id}/equipo", name="listado_equipo")
     * @Template()
     */
    public function listadoEquipoAction($id)
    {
        $em = $this->getDoctrine()->getManager();

        $entity = $em->getRepository('SistemaAdminBundle:Equipo')->find($id);

        if (!$entity) {
            throw $this->createNotFoundException('Unable to find Equipo entity.');
        }

        return array(
            'entity'      => $entity
        );
    }
    
    /**
     * Finds and displays a Equipo entity.
     *
     * @Route("listado/{id}/jugador", name="listado_jugador")
     * @Template()
     */
    public function listadoJugadorAction($id)
    {
        $em = $this->getDoctrine()->getManager();

        $entity = $em->getRepository('SistemaAdminBundle:Jugador')->find($id);

        if (!$entity) {
            throw $this->createNotFoundException('Unable to find Jugador entity.');
        }

        return array(
            'entity'      => $entity
        );
    }
    
    //REPORTES EN PDF!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    /**
     * REPORTE DE TORNEO GRUPO EQUIPOS
     * 
     * @Route("/listado/reporte/{id}/grupo", name="listado_reporte_grupo")
     * @Template()
     */
    public function reporteGrupoAction($id)
    {
        $em = $this->getDoctrine()->getManager();

        $torneo = $em->getRepository('SistemaAdminBundle:Torneo')->find($id);
        $grupos = $em->getRepository('SistemaAdminBundle:Grupo')->findBy(array('idTorneo' => $id));
        
        if (!$grupos) {
            throw $this->createNotFoundException('Unable to find Torneo entity.');
        }

        $pdf = $this->renderView('SistemaFrontendBundle:Listado:reporteGrupo.pdf.twig', array(
            'torneo'    => $torneo,
            'grupos'    => $grupos,
        ));

        return $this->get('sistema_tcpdf')->quick_pdf($pdf);
    }
    
    /**
     * REPORTE DE EQUIPO JUGADORES CUERPO TECNICO
     * 
     * @Route("/listado/reporte/{id}/equipo", name="listado_reporte_equipo")
     * @Template()
     */
    public function reporteEquipoAction($id)
    {
        $em = $this->getDoctrine()->getManager();

        $entity = $em->getRepository('SistemaAdminBundle:Equipo')->find($id);
        
        if (!$entity) {
            throw $this->createNotFoundException('Unable to find Equipo entity.');
        }

        $pdf = $this->renderView('SistemaFrontendBundle:Listado:reporteEquipo.pdf.twig', array(
            'entity'    => $entity
        ));

        return $this->get('sistema_tcpdf')->quick_pdf($pdf);
    }
    
    /**
     * REPORTE DE EQUIPO SOLO CUERPO TECNICO
     * 
     * @Route("/listado/reporte/{id}/equipo/ct", name="listado_reporte_equipo_ct")
     * @Template()
     */
    public function reporteEquipoCtAction($id)
    {
        $em = $this->getDoctrine()->getManager();

        $entity = $em->getRepository('SistemaAdminBundle:Equipo')->find($id);
        
        if (!$entity) {
            throw $this->createNotFoundException('Unable to find Equipo entity.');
        }

        $pdf = $this->renderView('SistemaFrontendBundle:Listado:reporteEquipoCt.pdf.twig', array(
            'entity'    => $entity
        ));

        return $this->get('sistema_tcpdf')->quick_pdf($pdf);
    }
    
    /**
     * REPORTE DE JUGADORES
     * 
     * @Route("/listado/reporte/{id}/jugador", name="listado_reporte_jugador")
     * @Template()
     */
    public function reporteJugadorAction($id)
    {
        $em = $this->getDoctrine()->getManager();

        $entity = $em->getRepository('SistemaAdminBundle:Jugador')->find($id);
        
        if (!$entity) {
            throw $this->createNotFoundException('Unable to find Equipo entity.');
        }

        $pdf = $this->renderView('SistemaFrontendBundle:Listado:reporteJugador.pdf.twig', array(
            'entity'    => $entity
        ));

        return $this->get('sistema_tcpdf')->quick_pdf($pdf);
    }
    
    /**
     * REPORTE DE TORNEO GRUPO EQUIPOS
     * 
     * @Route("/listado/reporte/{id}/partido", name="listado_reporte_partido")
     * @Template()
     */
    public function reportePartidoAction($id)
    {
        $em = $this->getDoctrine()->getManager();

        $torneo = $em->getRepository('SistemaAdminBundle:Torneo')->find($id);
        $fechas = $em->getRepository('SistemaAdminBundle:Fecha')->findFechasByTorneo($id);
        
        if (!$fechas) {
            throw $this->createNotFoundException('Unable to find Fecha entity.');
        }
        
        $contenido = $this->renderView('SistemaFrontendBundle:Listado:reportePartido.pdf.twig', array(
            'torneo'    => $torneo,
            'fechas'    => $fechas,
        ));

        $pdf = <<<EOD
<style>
table {
    table-layout: fixed;
    width: 100%;
    font-size: 10pt;
}
.table-bordered {
    -moz-border-bottom-colors: none;
    -moz-border-left-colors: none;
    -moz-border-right-colors: none;
    -moz-border-top-colors: none;
    border-collapse: separate;
    border-color: #DDDDDD;
    border-image: none;
    border-radius: 4px;
    border-style: solid;
    border-width: 1px;
}
td {
    border: solid thin #DDDDDD;
}
td.th {
    font-weight: bold;
}
</style>
$contenido
EOD;
        
        return $this->get('sistema_tcpdf')->quick_pdf($pdf);
    }
    
    /**
     * Busca partidos de una fecha
     *
     * @Route("/listado/reporte/partidos/{id}/fecha", name="listado_reporte_partidos_fecha")
     * @Template("SistemaFrontendBundle:Listado:reportePartidosFecha.pdf.twig")
     */
    public function reportePartidosFechaAction($id)
    {
        $em = $this->getDoctrine()->getManager();

        $partidos = $em->getRepository('SistemaAdminBundle:Fecha')->findPartidosByFecha($id);

        return array(
            'partidos'    => $partidos
        );
    }
}